/**
 * 判断输入的参数值是否不为空
 * @method
 * @param {*} v 输入参数值
 * @return {Boolean} 参数值是否不为空
 */
function has (v) {
    if (v === undefined || v == null) {
        return false
    }
    return true
}
/**
 * 从给定的所有可选值中，从前到后寻找一个非空值作为函数返回值，如果都为空则抛出异常。通常用于可选值的赋值中
 * @method
 * @returns {*} 返回第一个非空的参数值。
 */
function any () {
    let out
    for (let i in arguments) {
        if (has(arguments[i])) {
            out = arguments[i];
            break;
        }
    }
    if (!has(out)) {
        throw new Error("the any property can not be null or undefined");
    }
    return out;
}
/**
 * 判断输入的参数值是否为空，非空返回该值，否则抛出异常。
 * @method
 * @param {*} v 输入参数值
 * @returns {*} 输入参数值非空，则返回输入参数值，否则抛出异常。
 */
function must (v) {
    if (!has(v)) {
        throw new Error("the must property can not be null or undefined");
    }
    return v;
}
/**
 * 判断给定的参数值是否全部非空，若不为空，返回最后一个非空值，否则返回第一个空值。
 * @method
 * @returns {Boolean} 给定的参数值是否全部非空。
 */
function all () {
    let out = true;
    for (let i in arguments) {
        out = out && arguments[i];
    }
    return out;
}
function areTypedArraysEqual (arr1, arr2) {
    if (arr1.length !== arr2.length) {
        return false;
    }

    for (let i = 0; i < arr1.length; i++) {
        if (arr1[i] !== arr2[i]) {
            return false;
        }
    }

    return true;
}
const isArrEqual = (arr1, arr2) => {
    return arr1.join("") === arr2.join("");
};
export { must, any, has, all,areTypedArraysEqual,isArrEqual }
